#pragma once

#include "Sol9Types.h"

namespace sol9
{
namespace core
{
	class degree;

	class radian
	{
	private:
		f32 r;

	public:
		/// constructors
		radian();

		explicit radian(f32 radians);
		
		radian(const radian& radians);
		
		radian(const degree& degrees);

		/// operators
		// -radian
		radian operator-() const;

		// radian = value
		radian& operator=(const f32& value);

		// radian = radian
		radian& operator=(const radian& radians);

		// radian = degree
		radian& operator=(const degree& degrees);

		// radian + radian
		radian operator+(const radian& radians) const;

		// radian + degree
		radian operator+(const degree& degrees) const;

		// radian += radian
		radian& operator+=(const radian& radians);

		// radian += degree
		radian& operator+=(const degree& degrees);

		// radian - radian
		radian operator-(const radian& radians) const;

		// radian - degree
		radian operator-(const degree& degrees) const;

		// radian -= radian
		radian& operator-=(const radian& radians);

		// radian -= degree
		radian& operator-=(const degree& degrees);

		// radian * value
		radian operator*(const f32& value) const;

		// radian * radian
		radian operator*(const radian& radians) const;

		// radian *= value
		radian& operator*=(const f32& value);

		// radian / value
		radian operator/(const f32& value) const;

		// radian /= value
		radian& operator/=(const f32& value);

		// radian < radian
		bool operator<(const radian& radians) const;

		// radian <= radian
		bool operator<=(const radian& radians) const;

		// radian > radian
		bool operator>(const radian& radians) const;

		// radian >= radian
		bool operator>=(const radian& radians) const;

		// radian == radian
		bool operator==(const radian& radians) const;

		//// radian == degree
		//bool operator==(const degree& degree) const;

		// radian != radian
		bool operator!=(const radian& radians) const;

		//// radian != degree
		//bool operator!=(const degree& degrees) const;

		/// functions
		f32 makeDegree() const;
	};

} // namespace core
} // namespace sol9